/**
 * Created by dashan on 2017/3/21.
 */


var Redis = require('ioredis');
var redis = new Redis({
    port: 6379,          // Redis port
    host: '101.201.211.142',   // Redis host
    family: 4,           // 4 (IPv4) or 6 (IPv6)
    password: 'VCa201611',
    db: 10
})

// redis.set('foo', 'bar');
// redis.get('foo', function (err, result) {
//     console.log(result);
// });

// Or using a promise if the last argument isn't a function
// redis.get('foo').then(function (result) {
//     console.log(result);
// });

// Arguments to commands are flattened, so the following are the same:
// redis.sadd('set', 1, 3, 5, 7);
// redis.sadd('set', [1, 3, 5, 7]);

// All arguments are passed directly to the redis server:
// redis.set('key', 100, 'EX', 10);

// redis.get('set').then(function (result) {
//     console.log(result);
// });


// redis.connect(function(some,tie){
//     console.log("=======");
//     console.log(err);
//     console.log(tie);
// })






//Pub/Sub


//////////////////  string  /////////////////


// redis.set('aaaa',123);
// redis.incr('aaaa',function(err,doc){
//     console.log(err);
//     console.log(doc);//124
// });

// redis.decr('aaaa',function(err,doc){
//     console.log(err);
//     console.log(doc);//124
// });

// redis.append('aaaa',88888);   //12388888


// redis.pipeline([
//     ['keys'],
// ]).exec(function (err, result) { /* ... */
//     console.log(result);
// });




/////////////////////// 集合 ///////////////////////



//添加
// redis.sadd('set1',1,function(err,doc){
//     console.log(err);
//     console.log(doc);
// })
//
// redis.sadd('set2',2,function(err,doc){
//     console.log(err);
//     console.log(doc);
// })
//
// redis.sadd('set3','sdfsdfsfs',function(err,doc){
//     console.log(err);
//     console.log(doc);
// })



//查看 集合
// redis.smembers('set1',function(err,docs){
//     console.log(err);
//     console.log(docs);
// });
// redis.smembers('set2',function(err,docs){
//     console.log(err);
//     console.log(docs);
// });
// redis.smembers('set3',function(err,docs){
//     console.log(err);
//     console.log(docs);
// });




//出栈
// redis.spop('set1',function(err,doc){
//     console.log(err);
//     console.log(doc);
// })


//移除
// srem set1 1

// redis.srem('set2',5,function(err,doc){
//     console.log(err);
//     console.log(doc);
// })

///////////////////// hash 数据 ////////////////////

// hset userInfo name  asion


// redis.hashSet('userInfo','name','asion');

// redis.hset('userInfo','name','asion');


// redis.hget('userInfo','name',function(err,doc){
//     console.log(err);
//     console.log(doc);
// });


//////////////// list 类型的操作 /////////////////

// redis.lpush('link1','A');
// redis.lpush('link1','B');
// redis.lpush('link1','C');

redis.pop('link1',function(err,doc){
    console.log(err);
    console.log(doc);
})


/////////////////// 处理二进制数据 ///////////////
// redis.set('bar', new Buffer('bar'));
// redis.getBuffer('bar', function (err, result) {
//     // result is a buffer.
//     console.log(result);
//     console.log(result.toString());
// });
/////////////////////////////////////////////////





/////////////////// 流水线处理  //////////////////
// Pipelining
// 如果你想要把一个批处理命令（e.g> 5），你可以使用流水线的指令队列的内
// 存，然后将它们发送到Redis的一次。这样的性能提高了50%～300%


// e.g1:
// redis.pipeline().set('foo', 'bar').get('foo', function (err, result) {
//     // result === 'bar'
//     console.log("get:"+result);
// }).exec(function (err, result) {
//     // result[1][1] === 'bar'
//     console.log("exec:"+result);
//     console.log(result);
// });


// e.g2
//除了单独向流水线队列添加命令外，还可以向构造函数传递命令和参数数组：
// redis.pipeline([
//     ['set', 'foo1', 'bar2'],
//     ['set', 'foo2', 'bar2'],
//     ['set', 'foo3', 'bar2'],
//
//     ['get', 'foo1'],
//     ['get', 'foo2'],
//     ['get', 'foo3'],
//
//     //检查是否存在
//     ['exists', 'foo1'],
//     ['exists', 'foo2'],
//     ['exists', 'foo3'],
//
//     //移动到db 12
//     ['move', 'foo1','13'],
//     ['move', 'foo2','13'],
//     ['move', 'foo3','13'],
//
//
//
//     //设置键在指定时间秒数之后到期/过期。
//     //EXPIRE key seconds expire
//     ['expire', 'foo1','300000'],
//     ['expire', 'foo2','300000'],
//     ['expire', 'foo3','300000'],
//
//     //获取键的剩余到期时间。
//     ['pttl', 'foo1'],
//     ['pttl', 'foo2'],
//     ['pttl', 'foo3'],
//
//     //删除
//     ['del', 'foo1'],
//     ['del', 'foo2'],
//     ['del', 'foo3'],

        //	设置键的字符串值并返回其旧值。GETSET key value
//     ['getset', 'foo1', '1111'],
//     ['getset', 'foo2', '2222'],
//     ['getset', 'foo3', '3333'],

// ]).exec(function (err, result) { /* ... */
//     console.log(result);
// });


// e.g3
// var promise = redis.pipeline().set('foo', 'bar').get('foo').exec();
// promise.then(function (result) {
//     // result === [[null, 'OK'], [null, 'bar']]
// });

/////////////////////  事务的处理  ////////////////////////////

// redis.pipeline([
//
//     ['multi'],
//     ['set', 'aaaaa', 'bbbbb'],
//     ['exec'],
//     ['get', 'aaaaa'],
//
//
// ]).exec(function (err, result) { /* ... */
//     console.log(result);
// });


//链式操作，这个是可以的！
// redis.multi().set('ccccaa','dddd').get('cccc').exec(function(err,doc){
//     // console.log(err);
//     console.log(doc);
// });


/////////////////////  连接命令s  ////////////////////////////

// ECHO message
// AUTH password
// PING
// QUIT
// SELECT index



// redis.ping(function(err,doc){
//     console.log(err);
//     console.log(doc);
// });



/////////////////////  字符串  ////////////////////////////

//为多个键分别设置它们的值 MSET key value [key value …]  mset
// redis.mset(['key',121212,'key2',12]);


// 获取存储在键中的值的长度
// redis.strlen('key',function(err,docs){
//     console.log(docs);
// })



//APPEND key value  	将指定值附加到键
// redis.append('key','uuu',function(err,docs){
//     console.log(docs);
// })


/////////////////////  字符串  ////////////////////////////

//HGETALL myhash 	获取存储在指定键的哈希中的所有字段和值
// redis.hset('hkey','sdfsfsdfsfdssf',function(err,docs){
//     console.log(docs);
// })
//
// redis.hgetall('hkey',function(err,docs){
//     console.log(docs);
// })




/////////////////////////////////////////////////

// redis.set('key', 100, 'EX', 10);
// try{
// redis.set('key1', 100, 'key2', 10,'key3', 1000);
//
//
//
//     redis.get('key1', function (err, result) {
//         console.log(result);
//     });
//
//     redis.get('key2', function (err, result) {
//         console.log(result);
//     });
// }catch(err){
//     console.log("-------");
//     console.log(err);
// }
